package com.atguigu.spzx.manager.service.impl;

import com.atguigu.spzx.manager.mapper.OrderInfoMapper;
import com.atguigu.spzx.manager.service.OrderInfoService;
import com.atguigu.spzx.model.entity.order.OrderStatistics;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import com.atguigu.spzx.manager.service.OrderInfoService;
import org.springframework.util.CollectionUtils;

import java.util.*;

@Service
public class OrderInfoServiceImpl implements OrderInfoService {
    @Resource
    OrderInfoMapper orderInfoMapper;
    @Override
    public Map<String, List<Object>> listOrderStatistics(String begin, String end) {
        //以后订单数据非常多
        //如果实时查询订单的统计数据 订单表访问压力过大
        //可以通过定时任务 每天闲时 查询前一天的统计数据 存到一张统计表中
        //前端提交查询统计数据请求时 就可以到统计表中查询
//        List<Map<String,Object>> statisticsMapList = orderInfoMapper.selectOrderStatistics(begin,end);
        List<Map<String,Object>> statisticsMapList = orderInfoMapper.selectOrderStatisticList(begin,end);
        //map还需要将 统计时间列表  和每个统计时间映射的数据 转为两个List 返回
        //遍历statisticsMapList
        if(CollectionUtils.isEmpty(statisticsMapList)){
            return  null;
        }
        List<Object> xData = new ArrayList<>();
        List<Object> yData = new ArrayList<>();
        statisticsMapList.forEach(stringObjectMap -> {
            // 每个Map中 都有两条记录 map.put("paymentTime" , "2023-07-10") , map.put("totalAmount" , 3700.00)
//            xData.add(stringObjectMap.get("paymentTime"));
//            yData.add(stringObjectMap.get("totalAmount"));
            xData.add(stringObjectMap.get("order_date"));
            yData.add(stringObjectMap.get("total_amount"));
        });
        Map<String, List<Object>>  map = new HashMap<>();
        map.put("xData",xData);
        map.put("yData",yData);
        return map;
    }

    @Override
    public void genrerateOrderStatistics(String date) {
        // 按照统计表要求的数据 查询指定日期的统计数据
        OrderStatistics orderStatistics = orderInfoMapper.selectOrderStatisticsByDate(date);
        orderStatistics.setCreateTime(new Date());//保存统计数据时的时间  不是统计的订单的数据统计日期
        orderStatistics.setUpdateTime(new Date());
        orderInfoMapper.saveOrderStatistics(orderStatistics);
    }
}
